﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Collections;
using System.Windows.Forms;
using TechControl.BD;

namespace TechControl.Presentation
{
    public partial class frm_cadEquipamento : frm_default
    {
        frm_listaEquipamento listEsuipamento = new frm_listaEquipamento();

        public frm_cadEquipamento(frm_listaEquipamento sendedListEquipamento)
        {
            InitializeComponent();
            listEsuipamento = sendedListEquipamento;
        }

        //cancela inserção e volta para a tela de menu.
        private void bt_cancelar_Click(object sender, EventArgs e)
        {
            this.closeForm();
        }

        //Carrega proximo codEquipamento e marcas.
        private void frm_cadEquipamento_Load(object sender, EventArgs e)
        {
            selectLastCodEquip();

            ArrayList resultado = MarcaDB.getInstance().selectAllMarcas();
            for (int i = 0; i < resultado.Count; i++)
            {
                cbo_marca.Items.Add(resultado[i].ToString());
            }
        }

        //de acordo com o item selecionado em marca, lista os modelos pertencentes aquela marca.
        private void selectModelos()
        {
            cbo_modelo.Items.Clear();
            txt_descEquipamento.Text = "";
            cbo_modelo.SelectedItem = null;

            string[] separa = cbo_marca.SelectedItem.ToString().Split('=');
            Int64 marca = Int64.Parse(separa[0]);

            ArrayList resultado = ModeloDB.getInstance().selectByMarca(marca);
            for (int i = 0; i < resultado.Count; i++)
            {
                cbo_modelo.Items.Add(resultado[i].ToString());
            }
        }

        //chama o método que popula o combo de modelo.
        private void cbo_marca_SelectedIndexChanged(object sender, EventArgs e)
        {
            selectModelos();
        }

        //chama o método que preenche com a descrição do modelo o text de descrição.
        private void cbo_modelo_SelectedIndexChanged(object sender, EventArgs e)
        {
            selectDescModelo();
        }

        //busca a descrição do material selecionado e printa no text.
        private void selectDescModelo()
        {
            txt_descEquipamento.Text = "";

            string[] separa = cbo_modelo.SelectedItem.ToString().Split('=');
            Int64 modelo = Int64.Parse(separa[0]);

            string desModelo = ModeloDB.getInstance().selectDescModelo(modelo);

            txt_descEquipamento.Text = desModelo;
        }

        //busca ultimo registro feito na tabela e adiciona um (+1), para a inserção de um novo.
        private void selectLastCodEquip()
        {
            Int64 lastCod = EquipamentoDB.getInstance().getLastCodEquip();

            lastCod++;
            txt_codEquipamento.Text = "";
            txt_codEquipamento.Text = lastCod.ToString();
        }

        //salva registro de equipamento novo.
        private void bt_salvar_Click(object sender, EventArgs e)
        {
            if (verificaCampos())
            {
                Int64 id_equip = Int64.Parse(txt_codEquipamento.Text);
                string serial = txt_serial.Text;
                string imei = txt_imei.Text;
                string[] separaMarca = cbo_marca.SelectedItem.ToString().Split('=');
                string[] separaModelo = cbo_modelo.SelectedItem.ToString().Split('=');
                string descModelo = txt_descEquipamento.Text;
                string data = DateTime.Now.ToString("dd/MM/yyyy");
                string obs = txt_obs.Text;
                string pat = txt_pat.Text;
                string empresa = cbo_empresa.SelectedItem.ToString();

                if (listEsuipamento == null)
                {
                    if (EquipamentoDB.getInstance().insertNewEquip(id_equip, serial, imei, separaMarca[1].ToString(), separaModelo[1].ToString(), 
                        descModelo, "ATIVO", data, obs, pat, empresa))
                    {
                        var resultado = MessageBox.Show("Registro inserido com sucesso!, Deseja realizar outro registro?", "Novo Equipamento", MessageBoxButtons.YesNo,
                            MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                        if (resultado == DialogResult.Yes)
                        {
                            clear();
                        }
                        else
                        {
                            this.closeForm();
                        }
                    }
                }
                else
                {
                    if (EquipamentoDB.getInstance().insertNewEquip(id_equip, serial, imei, separaMarca[1].ToString(), separaModelo[1].ToString(), 
                        descModelo,"ATIVO", data, obs, pat, empresa))
                    {
                        var resultado = MessageBox.Show("Registro inserido com sucesso!, Deseja realizar outro registro?", "Novo Equipamento", MessageBoxButtons.YesNo,
                            MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                        if (resultado == DialogResult.Yes)
                        {
                            clear();
                        }
                        else
                        {
                            listEsuipamento.loadDadosOnGrid();
                            this.closeForm();
                        }
                    }
                }
            }
        }

        //verificqa campos obrigatórios
        private bool verificaCampos()
        {
            bool result = true;

            if (txt_imei.Text == "" && txt_serial.Text == "")
            {
                result = false;
                MessageBox.Show("Preencha um IMEI ou SERIAL para continuar", "Equipamento");
                txt_serial.Focus();
            }
            return result;
        }

        //limpa os campos.
        private void clear()
        {
            selectLastCodEquip();
            txt_serial.Text = "";
            txt_imei.Text = "";
            cbo_marca.Items.Clear();
            cbo_marca.SelectedItem = "";
            cbo_modelo.Items.Clear();
            cbo_modelo.SelectedItem = "";
            txt_descEquipamento.Text = "";
            txt_obs.Text = "";
            txt_serial.Focus();

            ArrayList resultado = MarcaDB.getInstance().selectAllMarcas();
            for (int i = 0; i < resultado.Count; i++)
            {
                cbo_marca.Items.Add(resultado[i].ToString());
            }
        }

        //chama o formulário de cadastro de Modelo.
        private void bt_addModelo_Click(object sender, EventArgs e)
        {
            frm_cadModelo cadModelo = new frm_cadModelo(this);
            cadModelo.showForm(this);
        }

        //recarrega o combo com os valores novos e seta o valor cadastrado.
        public void recarregaModelo(string modelo, string descModelo)
        {
            selectModelos();
            cbo_modelo.SelectedItem = modelo;
            txt_descEquipamento.Text = descModelo;
        }

        //recarrega Marca com valores novos e seta o ultimo valor cadastrado.
        public void recarregarMarca(string marca)
        {
            ArrayList resultado = MarcaDB.getInstance().selectAllMarcas();
            for (int i = 0; i < resultado.Count; i++)
            {
                cbo_marca.Items.Add(resultado[i].ToString());
            }

            cbo_marca.SelectedItem = marca;
        }

        //chama o formulário de cadastro de Marca.
        private void bt_addMarca_Click(object sender, EventArgs e)
        {
            frm_cadMarca cadMarca = new frm_cadMarca(this);
            cadMarca.showForm(this);
        }

        //evento realizado pela leitura do serial pelo leitor de código, ou o evento enter.
        private void txt_serial_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(System.Windows.Forms.Keys.Enter))
            {
                if (txt_serial.Text == "")
                {
                    MessageBox.Show("Insira um Serial para continuar", "Novo Serial");
                    txt_serial.Focus();
                }
                else
                {
                    txt_imei.Focus();
                }
            }
        }

        //evento realizado pela leitura do imei pelo leitor de código, ou o evento enter.
        private void txt_imei_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(System.Windows.Forms.Keys.Enter))
            {
                if (txt_imei.Text == "")
                {
                    MessageBox.Show("Insira um IMEI para continuar", "Novo IMEI");
                    txt_imei.Focus();
                }
                else
                {
                    txt_pat.Focus();
                }
            }
        }

        //evento realizado pela leitura do patrimonio pelo leitor de código, ou o evento enter.
        private void txt_pat_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(System.Windows.Forms.Keys.Enter))
            {
                if (txt_pat.Text == "")
                {
                    MessageBox.Show("Insira um Patrimonio para continuar", "Novo Patrimonio");
                    txt_pat.Focus();
                }
                else
                {
                    cbo_empresa.Focus();
                }
            }
        }
    }
}
